package com.robinmouren.utils;

import com.robinmouren.constant.OrderConstant;
import com.robinmouren.entity.OrderDetail;
import com.robinmouren.entity.TransportAddress;
import org.springframework.util.DigestUtils;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


/**
 * 自定义字符串工具
 */
public class StringUtils {


    /**
     * 考虑到会有将密码解码的需求，所以不用MD5
     * TODO 改用base64或其他
     * @param password
     * @return
     */
    public static String md5(String password){
        return DigestUtils.md5DigestAsHex(password.getBytes());
    }


    /**
     * 将两个字符串连接，用逗号隔开
     * @param first
     * @param second
     * @return
     */
    public static String makeStringTogether(String first, String second){
        return first + "," + second;
    }


    /**
     * 生成订单号、运单号、合同编号
     * @return
     */
    public static String generateOrderNumber(Integer number){
        // 获取对应类型订单的前缀
        String prefix = OrderConstant.MAP.get(number);
        // 获取订单号
        String string = StringUtils.randomString(OrderConstant.MAP_LENGTH.get(number));
        return prefix + string;
    }

    /**
     * 获取文件后缀
     */
    public static String obtainFileSuffix(String file) {
        return file.split("\\.")[1];
    }
    /**
     * 获取文件大小
     *
     * @param file
     * @return
     */
    public static Double obtainFileSizeAndRetainTwo(MultipartFile file) {
        return Double.valueOf(String.format("%.2f", file.getSize() / 1024.0 / 1024.0));
    }

    /**
     * 生成n位随机数
     * @return
     */
    public static String randomString(Integer n){
        // 创建一个Random实例
        Random random = new Random();

        // 生成10位随机数（这里假设是纯数字组成）
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < n; i++) {
            // 为了保证学号都是数字，我们生成0-9之间的整数
            int digit = random.nextInt(10);
            builder.append(digit);
        }

        return builder.toString();
    }

    /**
     * 将从数据库中获取的运输地址封装成对象
     * @param originPlace
     * @param destination
     * @return
     */
    public static TransportAddress removeSignToObject(String originPlace,String destination){

        String[] split1 = originPlace.split(",");
        String[] split2 = destination.split(",");
        return TransportAddress.builder()
                .origin(split1[0])
                .destination(split2[0])
                .originDetail(split1[1])
                .destinationDetail(split2[1])
                .build();
    }


    /**
     * 获取货物表中的货物名称
     * @param list
     * @return
     */
    public static String fetchNameInList(List<OrderDetail> list){

        List<String> result = new ArrayList<>();
        list.forEach(item -> {
            result.add(item.getName());
        });
        return ListUtils.removeStringListConclusion(result);
    }


    /**
     * 分割字符串并获得第一个
     * @param string
     * @return
     */
    public static String partitionStringToGetFirst(String string){
        return string.split(",")[0];
    }
    /**
     * 分割字符串并获得第n个
     * @param string
     * @return
     */
    public static String partitionStringToGet(String string,Integer n){
        return string.split(",")[n - 1];
    }
}
